// Configuraciones de la app
const allowedOrigins = [
'http://localhost:4200',
'http://localhost:3000',
'http://localhost:4001', //agregar puerto 4001
'https://apolloasesorias.com',
'https://www.apolloasesorias.com',
'https://qa.apolloasesorias.com',
'https://www.qa.apolloasesorias.com',
'https://api.apolloasesorias.com',
'https://api-qa.apolloasesorias.com'
];
Configuración Previa ultimas lineas de docker-compose.yml para agregar en la misma red docke (pegar desde la linea 60).
networks:
dokploy-network
apollo_network #Se añade esta linea para agregar a network docker
networks:
dokploy-network:
external: true
apollo_network: #Se añade esta linea para agregar a network docker
external: true #Se añade esta linea para agregar a network docker
Ejecución: Es crítico usar docker compose up --build para asegurar que la API se conecte a la red correcta (apollo_network) y tenga los orígenes CORS actualizados.
cd apollo-service-api
# Asegura que el docker-compose.yml tenga 'networks: - apollo_network'
docker-compose up -d --build
Notas Importantes:
La API corre en el puerto 4000.
Logs importantes: docker logs -f apollo-api
3. Frontend Web App (apollo-service-app)
Configuración Previa (src/environments/environment.ts): El frontend debe apuntar a la API local, no a QA.
Error de migración que impide el inicio de sesión:
Al intentar ingresar al sistema con las credenciales, aparece un error de contraseña incorrecta. Esto se debe a un problema en la migración actual del sistema. Para probar el sistema, dirígete a https://qa.apolloasesorias.com/, donde el sistema valida correctamente la contraseña.
Documentación de Módulos del Sistema Apollo
Este documento presenta un desglose técnico y funcional de los módulos que componen la plataforma Apollo.
1. Módulos del Núcleo (Core)
Estos módulos son la base del funcionamiento del sistema y gestionan aspectos transversales.
1.1 Gestión de Usuarios y Autenticación
Encargado de la seguridad, registro y perfiles de los actores del sistema.
Emails transaccionales (confirmación de cita, pago exitoso).
Documentación de Negocio del Sistema Apollo
Este documento describe el modelo de negocio, los procesos operativos y la estructura funcional de la plataforma Apollo, diseñada para conectar a estudiantes con tutores expertos.
1. Resumen Ejecutivo
Apollo es una plataforma de “marketplace” de servicios educativos que facilita la conexión entre personas que buscan aprender (Estudiantes) y expertos dispuestos a enseñar (Tutores). El sistema gestiona todo el ciclo de vida de la tutoría: desde la búsqueda y agendamiento, hasta la realización de la video llamada y el procesamiento seguro de los pagos.
2. Modelo de Negocio
El modelo de negocio de Apollo se basa en la intermediación de servicios educativos con un esquema de comisiones por transacción.
2.1 Propuesta de Valor
Para el Estudiante: Acceso centralizado a una amplia red de tutores verificados en diversas áreas de conocimiento (Software, Idiomas, Ciencias, etc.), con herramientas integradas de agenda y video conferencia.
Para el Tutor: Una plataforma profesional para ofrecer sus servicios, gestionar su disponibilidad, automatizar el cobro y construir una reputación digital verificable.
2.2 Fuentes de Ingresos
La principal fuente de ingresos es el cobro de comisiones por cada sesión de tutoría completada exitosamente.
Comisión por Transacción: La plataforma retiene un porcentaje (configurado por defecto en el sistema al 10%) del valor total de cada sesión pagada por el estudiante.
Gestión de Retiros: Los tutores acumulan saldo en la plataforma y pueden solicitar retiros a sus cuentas bancarias, proceso que también puede conllevar tarifas administrativas configurables.
3. Actores y Roles del Sistema
El sistema identifica cuatro roles principales con permisos y responsabilidades diferenciadas:
3.1 Estudiante (Usuario Regular)
Es el usuario final que consume los servicios.
Capacidades:
Búsqueda avanzada de tutores por tema, precio y calificación.
Visualización de perfiles detallados y disponibilidad.
Reserva y pago de sesiones.
Acceso a historial de sesiones y materiales compartidos.
Calificación y reseña del servicio recibido.
3.2 Tutor
Expertos que ofrecen servicios educativos.
Onboarding: Proceso riguroso de registro que incluye carga de documentos de identidad, certificados profesionales y video de presentación.
Capacidades:
Gestión de perfil profesional (bio, experiencia, tarifa por hora).
Creación de servicios específicos (ej. “Clase de Java Avanzado”, “Asesoría de Tesis”).
Configuración de disponibilidad horaria flexible.
Gestión de solicitudes de sesión (aceptar/rechazar).
Panel financiero para ver ganancias y solicitar retiros.
3.3 Administrador
Responsable de la gestión técnica y operativa total de la plataforma.
Capacidades:
Gestión global de usuarios (bloqueos, reactivaciones).
Configuración de parámetros del sistema (comisiones, pasarelas de pago).
Supervisión de transacciones financieras y auditoría.
3.4 Moderador
Rol enfocado en la calidad y seguridad de la comunidad.
Capacidades:
Verificación de documentos y perfiles de tutores nuevos.
Aprobación de videos de presentación.
Resolución de disputas básicas y moderación de contenido.
4. Procesos Core del Negocio
4.1 Ciclo de Vida de la Tutoría
Búsqueda: El estudiante localiza un tutor mediante filtros de especialidad o subespecialidad.
Solicitud: El estudiante selecciona un horario disponible y solicita la sesión.
Confirmación y Pago: El pago se procesa por adelantado y queda en custodia (escrow) o en estado “pendiente”.
Ejecución: En la fecha programada, ambos usuarios se conectan a través de la sala de video integrada en la plataforma.
Finalización y Liberación: Al concluir la sesión, el estado cambia a completado. El estudiante califica al tutor y los fondos (menos la comisión) se liberan a la billetera virtual del tutor.
4.2 Verificación de Confianza
Para garantizar la calidad, Apollo implementa un sistema de validación:
Validación de identidad mediante documentos oficiales.
Verificación de antecedentes académicos o certificados cargados.
Aprobación manual de perfiles antes de que sean públicos en el buscador.
4.3 Gestión Financiera
Pasarelas de Pago: Integración con múltiples proveedores (PayPal, Tarjetas de Crédito, PSE/Nequi según disponibilidad regional) para facilitar el pago del estudiante.
Billetera del Tutor: Los tutores visualizan su saldo en tiempo real.
Retiros: Los tutores registran cuentas bancarias para solicitar la transferencia de sus ganancias acumuladas.
5. Áreas de Conocimiento
La plataforma está diseñada para ser multi-disciplinaria. Actualmente, su estructura soporta categorías jerárquicas:
Temas (Topics): Grandes áreas como Desarrollo de Software, Matemáticas, Idiomas.
Subtemas (Subtopics): Especialidades como Frontend, Cálculo Diferencial, Inglés de Negocios.
Esta estructura permite escalar la oferta académica sin límites técnicos, adaptándose a la demanda del mercado.
Documentación Técnica del Sistema Apollo
Este documento detalla la arquitectura, componentes y tecnologías utilizadas en el sistema Apollo, una plataforma de tutorías y asesorías académicas.
1. Visión General de la Arquitectura
El sistema Apollo sigue una arquitectura de microservicios o servicios distribuidos, separando claramente la base de datos, el backend (API) y el frontend (App).
2. Componentes del Sistema
2.1 Base de Datos (apollo-service-db)
El sistema utiliza PostgreSQL como motor de base de datos relacional. Se utilizan extensiones avanzadas para funcionalidades específicas.
Motor: PostgreSQL
Gestión de Migraciones: Scripts personalizados en Node.js (migrate.js) y archivos SQL crudos.
Extensiones Activas:
uuid-ossp: Para generación de identificadores únicos (UUID v4).
pgcrypto: Para encriptación de datos sensibles a nivel de base de datos.
pg_trgm: Para búsquedas de texto eficientes (trigramas).
Esquema de Base de Datos (Principales Tablas)
El esquema es extenso y cubre todos los aspectos del negocio. A continuación se destacan los módulos principales:
Usuarios y Autenticación:
users: Tabla central. Almacena credenciales, estados y tokens.
roles: Definición de roles (user, tutor, admin, moderator).
user_roles: Relación muchos a muchos para asignación de roles.
profile: Información extendida del usuario (bio, ubicación, género).
Tutores y Servicios:
tutor_profile: Información específica de tutores (tarifa, experiencia, video).
tutor_services: Servicios ofrecidos por el tutor (precio, duración).
topics / subtopics: Categorización de las áreas de conocimiento (ej. Software -> Backend).
availability: Gestión de horarios disponibles.
Sesiones y Pagos:
sessions: Registro de las tutorías agendadas, estados (pendiente, confirmada, completada).
payments: Registro transaccional de pagos.
invoices: Facturación generada.
withdrawals: Solicitudes de retiro de fondos por parte de los tutores.
Sistema:
audit_log: Trazabilidad de acciones críticas.
notifications: Sistema de notificaciones internas.
app_settings: Configuración dinámica de la plataforma (comisiones, feature flags).
2.2 Backend API (apollo-service-api)
API RESTful construida con Node.js y Express.
Framework: Express 4.18
Lenguaje: JavaScript (CommonJS)
Seguridad:
helmet (implícito o recomendado), cors para gestión de orígenes.
jsonwebtoken (JWT) para autenticación stateless.
bcrypt para hashing de contraseñas.
passport para estrategias de autenticación (Google OAuth).
Patrón de Diseño: Arquitectura en Capas (Layered Architecture).
Controller: Maneja la petición HTTP, valida entrada básica y llama al servicio (users.controller.js).
Service: Contiene la lógica de negocio (users.service.js).
Repository: Abstracción del acceso a datos (users.repository.js). Interactúa directamente con la DB usando pg.
Routes: Definición de endpoints (users.routes.js).
Cada servicio cuenta con su propia configuración de contenedorización.
Docker: Existen Dockerfile en cada servicio para construir las imágenes.
Docker Compose: Archivos docker-compose.yml para orquestación local de los servicios.
Makefiles: Scripts de automatización para tareas comunes (build, run, logs).
4. Flujos Clave del Sistema
Registro y Onboarding:
Usuario se registra -> API crea registro en users y profile.
Si es tutor -> Llena tutor_profile, carga documentos (tutor_documents), define servicios (tutor_services).
Verificación administrativa requerida para tutores.
Agendamiento:
Estudiante busca tutor (filtro por topics, precio, rating).
Consulta availability del tutor.
Crea una session en estado pending o confirmed tras pago.
Video Llamada:
Se utiliza integración con GetStream o similar para la sala de video.
Historial y duración se registran en sessions.
HU Apollo
Dashboard y Visualización de Datos
HU-01: Mejorar la visualización de la distribución por país
Como Administrador de Apollo, Quiero visualizar la distribución de usuarios por país mediante una gráfica optimizada en el dashboard, Para interpretar rápidamente el alcance geográfico de la plataforma.
Criterios de Aceptación:
Dado que el Administrador se encuentra en la pantalla principal del Dashboard, Cuando carga la sección "Distribución por País", Entonces el sistema debe mostrar un gráfico (mapa interactivo o barras) que agrupe a tutores y estudiantes por país con etiquetas claras y legibles.
Ver imagen:
Configuración Regional y Moneda
HU-02: Definición de moneda según ubicación del usuario
Como Usuario de la plataforma (Estudiante o Tutor), Quiero visualizar los precios en mi moneda local o en una moneda estándar, Para entender el valor real de los servicios sin hacer cálculos manuales.
Criterios de Aceptación:
Dado que un usuario ingresa a la plataforma desde un país específico (detectado por IP o perfil), Cuando visualiza un servicio o consultoría, Entonces el precio se muestra en la moneda local de ese país si está soportada.
Dado que el sistema no puede detectar el país o la moneda no está soportada, Cuando se muestra el precio, Entonces el sistema debe mostrar el valor en Dólares Americanos (USD) por defecto.
Gestión de Servicios (Tutores)
HU-03: Restricción de visibilidad para tutores no aprobados
Como Tutor en proceso de registro, Quiero que el sistema restrinja mi vista de servicios activos, Para no confundirme con funcionalidades que aún no puedo operar.
Criterios de Aceptación:
Dado un tutor con estado "Pendiente" o "Rechazado", Cuando intenta acceder a la lista de servicios ofertados, Entonces el sistema no debe mostrar ningún registro ni permitir la creación de nuevos servicios hasta su aprobación.
Ver imagen Martin Delgado está rechazado y aparece
HU-04: Fijación de precios en Dólares (USD)
Como Tutor aprobado, Quiero establecer el valor de mis servicios en Dólares, Para estandarizar mi tarifa a nivel internacional.
Criterios de Aceptación:
Dado que el tutor está en el formulario "Crear Servicio", Cuando ingresa el monto en el campo "Valor", Entonces el sistema debe registrar y guardar dicho monto tratado explícitamente como USD (Dólares).
HU-05: Soporte para decimales en el valor del servicio
Como Tutor, Quiero poder ingresar puntos decimales en el precio de mis servicios, Para definir tarifas exactas (ej. 15.00 usd).
Criterios de Aceptación:
Dado que estoy ingresando el precio de un servicio, Cuando digito un valor que incluye un punto decimal (ej. "15.00"), Entonces el sistema debe permitir guardar el formulario sin mostrar errores de validación numérica. Debe mostrar la moneda por default.
Nota: si se usa dólar por default el punto se agrega a los 1.000 dólares y no es necesario mostrar los dos decimales en un precio de 15 usd - 120 usd, par no confundir.
HU-06: Visualización de Categoría en listado de servicios
Como Tutor, Quiero ver la categoría a la que pertenece cada uno de mis servicios en la tabla resumen, Para organizar y distinguir mis ofertas rápidamente.
Criterios de Aceptación:
Dado que el tutor accede a la tabla de visualización de "Mis Servicios", Cuando la tabla carga los datos, Entonces debe existir una columna visible llamada "Categoría" que muestre el rubro asignado a cada servicio.
Administración de Tutores
HU-07 y HU-08: Inactivación segura de Tutores (Soft Delete)
Como Administrador, Quiero inactivar tutores en lugar de eliminarlos, visualizando claramente a quién estoy modificando, Para preservar el historial de datos y evitar borrar usuarios incorrectos.
Criterios de Aceptación:
Dado que el Administrador selecciona la opción de quitar un tutor de la lista, Cuando aparece la ventana de confirmación, Entonces el modal debe mostrar explícitamente el Nombre del Tutor y un mensaje de advertencia.
Dado que el Administrador confirma la acción en el modal, Cuando se ejecuta el proceso, Entonces el sistema debe cambiar el estado del tutor a "Inactivo" (Soft Delete) en lugar de borrar el registro de la base de datos.
Perfil y Documentación
HU-09: Simplificación de UI al subir imagen de perfil
Como Usuario, Quiero una interfaz limpia al momento de cargar mi foto, Para saber claramente qué acciones tomar sin botones redundantes.
Criterios de Aceptación:
Dado que el usuario abre la opción "Subir Imagen" en su perfil, Cuando se despliega la interfaz de carga, Entonces solo deben mostrarse las opciones "Seleccionar archivo/Subir" o "Cancelar", eliminando los botones heredados de "Guardar Cambios" del formulario general.
Está ya se hizo, pero es importante generar la HU.
HU-10: Modal propio y corrección de carga de Cédula/Certificados
Como Tutor, Quiero subir mis documentos (cédula, certificados) a través de una ventana emergente funcional, Para completar mi validación sin errores técnicos.
Criterios de Aceptación:
Dado que estoy en la sección de carga de documentos, Cuando intento subir el PDF de la cédula o certificados, Entonces debe abrirse la búsqueda de los archivos de manera directa..
Esta mostrando error al subir:
Dado que selecciono un archivo PDF válido para certificados, Cuando escriba el nombre y cargue el archivo. Entonces el sistema debe procesar el archivo correctamente visualizarlo en el espacio para Certificados y no mostrar el mensaje de "Error al subir pdf" si no tiene fundamento. (un fundamento puede ser el peso, debe ser de 5 mb por ejemplo)
.
HU-11: Integración de API de Países y Ciudades
Como Usuario gestionando mi perfil, Quiero seleccionar mi ubicación de listas desplegables estandarizadas, Para asegurar que mi localización sea exacta y compatible con el sistema.
Criterios de Aceptación:
Dado que estoy editando mi información personal, Cuando selecciono un país de la lista (API externa), Entonces el campo "Ciudad" debe actualizarse automáticamente cargando solo las ciudades correspondientes a ese país.
Ver imagen: aplica para todos los roles:
Agenda y Disponibilidad
HU-12: Identificación visual de disponibilidad
Como Usuario (Estudiante buscando tutor), Quiero ver los días con disponibilidad resaltados con un color específico (Colocar mas llamativo), Para identificar rápidamente cuándo puedo agendar una consultoría.
Nota: que se note la diferencia del que esté seleccionado y que también se resalta el color los días disponibles. El sistema es para personas mayores de 35, por tanto a esa edad empiezan a ahondar problemas visuales.
Criterios de Aceptación:
Dado que visualizo el calendario de un tutor, Cuando existen franjas horarias libres en una fecha, Entonces la celda de ese día debe tener un color de fondo distintivo (ej. verde) diferente a los días sin disponibilidad y de me debe permitir escoger la franja del servicio en función de lo que demora el servicio.
Nota: el servicio demora 10 minutos, pero se muestra intervalos de 30 minutos.
.
HU-13: Gestión de disponibilidad en reservas pendientes y corrección horaria
Como Tutor y Sistema Apollo, Quiero que la disponibilidad se gestione dinámicamente según el estado de la reserva y que las horas sean exactas, Para maximizar las oportunidades de venta y evitar errores de agenda.
Criterios de Aceptación:
Dado que una solicitud de cita entra en estado "Pendiente" (pago no confirmado), Cuando transcurre un tiempo límite configurado (X horas) sin confirmación, Entonces el sistema debe liberar automáticamente ese horario, volviendo a estar disponible para otros usuarios.
Dado que se agenda una asesoría, Cuando se guarda en la base de datos y se muestra en el calendario, Entonces la hora registrada debe coincidir exactamente con la hora seleccionada por el usuario (corrección de desfase horario).
Notificaciones y UI General
HU-14: Notificaciones por correo electrónico
Como Usuario de Apollo, Quiero recibir correos electrónicos sobre mis interacciones, Para estar enterado de mis citas sin necesidad de estar logueado en la plataforma.
Criterios de Aceptación:
Dado que se crea, reprograma o cancela una consultoría, Cuando el evento se confirma en el sistema, Entonces se debe enviar automáticamente un correo electrónico tanto al Tutor como al Estudiante con los detalles actualizados.
HU-15: Estandarización de estilos en botones
Como Usuario, Quiero que todos los botones de la plataforma tengan una apariencia consistente, Para tener una experiencia de navegación visualmente agradable y profesional.
Criterios de Aceptación:
Dado cualquier pantalla de la plataforma Apollo, Cuando visualizo botones de acción (Guardar, Cancelar, Editar), Entonces todos deben cumplir con los estilos definidos en el UI Kit (color, radio del borde, tipografía y efecto hover).
Nota: Así como agregar nuevo servicio en el fondo, en el modal cancelar y guardar no tiene estilos de botón.